package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/***
 * 打包完成后 window系统 切换对应目录 java -jar 包名.启动服务
 */
//Spring-boot运行原理(主启动类)
//@SpringBootApplication 来标注一个主程序类 ， 说明这是一个Spring Boot应用 @SpringBootApplication
@SpringBootApplication
/**
 * 作用:标注在某个类上说明这个类是SpringBoot的主配置类 ，SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
 * 进入这个注解:可以看到上面还有很多其他注解!
 * @SpringBootConfiguration
 * @EnableAutoConfiguration
 * @ComponentScan(
 * excludeFilters = {@Filter(
 * type = FilterType.CUSTOM,
 * classes = {TypeExcludeFilter.class}
 * ), @Filter(
 * type = FilterType.CUSTOM,
 * classes = {AutoConfigurationExcludeFilter.class}
 * )})
 * public @interface SpringBootApplication { // ......
 * }
 */
public class DemoApplication {

    public static void main(String[] args) {
        //以为是启动了一个方法，实际启动了一个服务
        SpringApplication.run(DemoApplication.class, args);
    }

    //TODO
    /*
        1.@ComponentScan
        这个注解在Spring中很重要 ,它对应XML配置中的元素。
        作用：自动扫描并加载符合条件的组件或者bean ， 将这个bean定义加载到IOC容器中

        2.@SpringBootConfiguration
        作用:SpringBoot的配置类 ，标注在某个类上 ， 表示这是一个SpringBoot的配置类;
        我们继续进去这个注解查看
        // 点进去得到下面的 @Component
            @Configuration
            public @interface SpringBootConfiguration {}
            @Component
            public @interface Configuration {}
            这里的 @Configuration，说明这是一个配置类 ，配置类就是对应Spring的xml 配置文件;
            里面的 @Component 这就说明，启动类本身也是Spring中的一个组件而已，负责启动应用! 我们回到 SpringBootApplication 注解中继续看。


        3.@EnableAutoConfiguration
        @EnableAutoConfiguration :开启自动配置功能
        以前我们需要自己配置的东西，而现在SpringBoot可以自动帮我们配置 ; @EnableAutoConfiguration
        告诉SpringBoot开启自动配置功能，这样自动配置才能生效;
            点进注解接续查看:
            @AutoConfigurationPackage : 自动配置包
                @Import({Registrar.class})
                    public @interface AutoConfigurationPackage {
                     }
             @import :Spring底层注解@import ， 给容器中导入一个组件
     */

}
